package JVM.第02篇_类的加载篇;

/**
 * ① 第一过程的加载(loading) 也称为装载
 *      在Java中数据类型分为基本数据类型和引用数据类型。
 *      基本数据类型由虛拟机预先定义，引用数据类型则需要进行类的加载。
 *
 *    过程~:类的装载
 *   所谓装载，简而言之就是将Java类的字节码文件加载到机器内存中，
 *   并在内存中构建出Java类的原型 --  类模板对象。
 *
 *   装载完成的操作
 *   装载阶段，简言之，查找并加载类的二进制数据，生成Class的实例。
 *   在加载类时，Java虚拟机必须完成以下3件事情:
 *   ●通过类的全名，获取类的二进制数据流。
 *   ●解析类的二进制数据流为方法区内的数据结构(Java类模型)
 *   ●创建java.lang.Class类的实例，表示该类型。
 *      作为方法区这个类的各种数据的访问入口
 *
 * 类模板对象
 * 所谓类模板对象，其实就是Java类在JVM内存中的一个快照，
 * JVM将 从字节码文件中解析出的常量池、类字段、类方法等信息存储到类模板中，
 * 这样JVM在运行期便能通过类模板而获取Java类中的任意信息，
 * 能够对Java类的成员变量进行遍历，也能进行Java方法的调用。
 *
 * 反射的机制即基于这一基础。
 * 如果JVM没有将Java类的声明信息存储起来，则JVM在 运行期也无法反射。
 *
 * 类模型的位置
 * 加载的类在JVM中创建相应的类结构，类结构会存储在方法区
 * (JDK1.8之前:永久代; JDK1.8及之后: 元空间)。
 *
 * 二进制流的获取方式
 * 对于类的二进制数据流，虚拟机可以通过多种途径产生或获得。
 * ( 只要所读取的字节码符合JVM规范即可)
 * ● 虚拟机可能通过文件系统读入-一个class后缀的文件(最常见)
 * ●读入jar、zip等归档数据包，提取类文件。
 * ●事先存放在数据库中的类的二进制数据
 *
 * ●使用类似于HTTP之类的协议通过网络进行加载
 * ●在运行时生成一段Class的二进制信息等
 *
 * 在获取到类的二进制信息后，Java虚拟机就会处理这些数据，
 * 并最终转为一个java.lang.Class的实例。
 *
 * 如果输入数据不是ClassFile的结构，则会抛出ClassFormatError.
 */
public class A1_类的装载 {

}
